/*
给定一个有 n 个整数的数组，你需要找到满足以下条件的三元组 (i, j, k) ：

0 < i, i + 1 < j, j + 1 < k < n - 1
子数组 (0, i - 1)，(i + 1, j - 1)，(j + 1, k - 1)，(k + 1, n - 1) 的和应该相等。
这里我们定义子数组 (L, R) 表示原数组从索引为L的元素开始至索引为R的元素。

 

示例:

输入: [1,2,1,2,1,2,1]
输出: True
解释:
i = 1, j = 3, k = 5. 
sum(0, i - 1) = sum(0, 0) = 1
sum(i + 1, j - 1) = sum(2, 2) = 1
sum(j + 1, k - 1) = sum(4, 4) = 1
sum(k + 1, n - 1) = sum(6, 6) = 1

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/split-array-with-equal-sum
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
    bool splitArray(vector<int>& nums) {
        if(nums.size()<7)
            return false;
        for(int i =1;i<nums.size();i++){
            nums[i]+=nums[i-1];
        }
        for(int j = 3;j<nums.size()-3;j++){
            unordered_set<int> sets;
            for(int i = 1;i<j-1;i++){
                if(nums[i-1]==nums[j-1]-nums[i]){
                    sets.insert(nums[i-1]);
                }
            }
            for(int k = j+2;k<nums.size()-1;k++){
                if(nums.back()-nums[k]==nums[k-1]-nums[j]&&sets.find(nums[k-1]-nums[j])!=sets.end())
                    return true;
            }
        }
        return false;
    }
};